package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.SysDataset;
import com.ruoyi.system.domain.SysDatasetVersion;
import com.ruoyi.system.domain.vo.SysDatasetQuery;

/**
 * 数据集配置Service接口
 * 
 * @author ruoyi
 */
public interface ISysDatasetService
{
    /**
     * 查询数据集配置
     * 
     * @param datasetId 数据集配置ID
     * @return 数据集配置
     */
    public SysDataset selectDatasetById(Long datasetId);

    /**
     * 根据数据集编码查询数据集配置
     * 
     * @param datasetCode 数据集编码
     * @return 数据集配置
     */
    public SysDataset selectDatasetByCode(String datasetCode);

    /**
     * 查询数据集配置列表
     * 
     * @param datasetQuery 数据集配置
     * @return 数据集配置集合
     */
    public List<SysDataset> selectDatasetList(SysDatasetQuery datasetQuery);

    /**
     * 查询所有启用的数据集
     * 
     * @return 数据集列表
     */
    public List<SysDataset> selectEnabledDataset();

    /**
     * 新增数据集配置
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public int insertDataset(SysDataset dataset);

    /**
     * 修改数据集配置
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public int updateDataset(SysDataset dataset);

    /**
     * 批量删除数据集配置
     * 
     * @param datasetIds 需要删除的数据集配置ID
     * @return 结果
     */
    public int deleteDatasetByIds(Long[] datasetIds);

    /**
     * 删除数据集配置信息
     * 
     * @param datasetId 数据集配置ID
     * @return 结果
     */
    public int deleteDatasetById(Long datasetId);

    /**
     * 校验数据集编码是否唯一
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public String checkDatasetCodeUnique(SysDataset dataset);

    /**
     * 测试数据集连接/执行
     * 
     * @param dataset 数据集配置
     * @return 结果
     */
    public Map<String, Object> testDatasetConnection(SysDataset dataset);

    /**
     * 预览数据集数据
     * 
     * @param datasetId 数据集ID
     * @param params 查询参数
     * @param limit 限制条数
     * @return 数据列表
     */
    public List<Map<String, Object>> previewDatasetData(Long datasetId, Map<String, Object> params, Integer limit);

    /**
     * 执行数据集查询
     * 
     * @param datasetId 数据集ID
     * @param params 查询参数
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 查询结果（包含数据和总数）
     */
    public Map<String, Object> executeDatasetQuery(Long datasetId, Map<String, Object> params, Integer pageNum, Integer pageSize);

    /**
     * 更新数据集元数据
     * 
     * @param datasetId 数据集ID
     * @return 结果
     */
    public boolean updateDatasetMetadata(Long datasetId);

    /**
     * 刷新数据集数据量
     * 
     * @param datasetId 数据集ID
     * @return 数据量
     */
    public Long refreshDatasetCount(Long datasetId);

    /**
     * 根据数据源ID查询数据集列表
     * 
     * @param datasourceId 数据源ID
     * @return 数据集列表
     */
    public List<SysDataset> selectDatasetByDatasourceId(String datasourceId);

    // 版本管理相关方法

    /**
     * 查询数据集版本历史
     * 
     * @param datasetId 数据集ID
     * @return 版本历史列表
     */
    public List<SysDatasetVersion> selectDatasetVersionList(Long datasetId);

    /**
     * 查询指定版本
     * 
     * @param versionId 版本ID
     * @return 版本信息
     */
    public SysDatasetVersion selectDatasetVersionById(Long versionId);

    /**
     * 创建新版本
     * 
     * @param dataset 数据集信息
     * @param changeDescription 变更说明
     * @return 新版本号
     */
    public String createNewVersion(SysDataset dataset, String changeDescription);

    /**
     * 回滚到指定版本
     * 
     * @param versionId 版本ID
     * @return 结果
     */
    public boolean rollbackToVersion(Long versionId);

    /**
     * 删除版本
     * 
     * @param versionId 版本ID
     * @return 结果
     */
    public int deleteDatasetVersion(Long versionId);

    /**
     * 批量删除版本
     * 
     * @param versionIds 版本ID列表
     * @return 结果
     */
    public int deleteDatasetVersionByIds(Long[] versionIds);

    /**
     * 比较两个版本的差异
     * 
     * @param versionId1 版本1ID
     * @param versionId2 版本2ID
     * @return 差异信息
     */
    public Map<String, Object> compareVersions(Long versionId1, Long versionId2);
}